package battleco

import (
	"wails/schema/config/commonco"
	"wails/schema/enums/battleenum"
)

// @schema_export --ident=schema --json --config=响应
// @schema_go
// @cache_ts
// @alias 响应
type C响应 struct {
	// 同一个单位只能存在唯一标识的响应
	// 场景: 一个附加流血伤害, 一个附加灼烧伤害, 标识都为"属性", 则使用【标识优先级】更高的响应
	// 如果没有设置【标识】，则两者都会触发响应
	// @alias 标识
	B标识 string

	// @alias 标识优先级
	B标识优先级 int16

	// @alias 触发几率
	C触发几率 float64
	// 触发需要的费用
	// @alias 消耗
	X消耗 *S消耗

	// @alias 验证器
	Y验证器 map[string]string `link:"验证器"`

	// @alias 创建表现
	C创建表现 map[string]string `link:"表现"`
}

// @schema_export --ident=schema --json --config=响应
// @schema_go
// @cache_ts
// @alias 响应_位移
type C响应_位移 struct {
	// @alias 碰撞过滤器
	S碰撞过滤器 *S目标过滤器

	// 传送过程中，对被碰撞单位产生的效果
	// @alias 碰撞效果
	M碰撞效果 string `link:"效果"`

	// 移动过程中，在足印下产生的效果，通常用于修改地形
	// 例如暂时修改成熔岩之地
	// @alias 足印效果
	M足印效果 string `link:"效果"`
}

// @schema_export --ident=schema --json --config=响应
// @schema_go
// @cache_ts
// @alias 响应_闪避
type C响应_闪避 struct {
	C响应
	// @alias 响应位置
	X响应位置 battleenum.DamageLocation

	// @alias 响应条件
	X响应条件 *S闪避响应条件

	// 当该单位对伤害作出反应时应用于该单位的效果
	// @alias 响应效果
	X响应效果 string `link:"效果"`
}

// @schema_export --ident=schema --json --config=响应
// @schema_go
// @cache_ts
// @alias 响应_死亡
type C响应_死亡 struct {
	C响应
	// @alias 响应位置
	X响应位置 battleenum.DamageLocation

	// @alias 响应条件
	X响应条件 *S死亡响应条件

	// 当该单位对伤害作出反应时应用于该单位的效果
	// @alias 响应效果
	X响应效果 string `link:"效果"`
}

// @schema_export --ident=schema --json --config=响应
// @schema_go
// @cache_ts
// @alias 响应_伤害
type C响应_伤害 struct {
	C响应

	// 条件-位置
	// 该单位(获得buff的单位)对伤害作出反应时所处的位置
	// 该单位受到伤害时, Location等于Defender时, 条件成立
	// 该单位对目标产生伤害时, Location等于Attacker时, 条件成立
	// @alias 响应位置
	X响应位置 battleenum.DamageLocation

	// @alias 伤害位置
	X伤害位置 battleenum.DamageValue

	// @alias 响应条件
	X响应条件 *S伤害响应条件

	// 修正-伤害加成
	// @alias 伤害加成
	S伤害加成 *commonco.X修正公式

	// 触发响应后的修改
	// 修正-伤害限制
	// @alias 伤害限制
	S伤害限制 *commonco.ValueLimit

	// 当该单位对伤害作出反应时应用于该单位的效果
	// @alias 响应效果
	X响应效果 string `link:"效果"`

	// 最终的伤害加成值消耗的充能
	// 当充能达到最大值时，无法再作出响应
	// 场景：获得可承受100伤害的能量护盾
	// @alias 耗尽充能
	H耗尽充能 *S消耗充能

	// @alias 耗尽效果
	H耗尽效果 string `link:"效果"`
}

type S伤害响应条件 struct {

	// 条件-暴击
	// 当前设为true的时候才检查
	// @alias 暴击
	B暴击 battleenum.BoolIgnore
	// 条件-是否致命
	// 基于伤害对该单位是否致命而对此伤害作出的反应
	// 当前设为true的时候才检查
	// @alias 致命
	Z致命 battleenum.BoolIgnore
	// 条件-种类
	// 该单位应对其作出反应的伤害类型
	// @alias 伤害类型
	S伤害类型 map[battleenum.S伤害类型]bool
	// 条件-伤害限制
	// 产生的伤害在范围内才会触发
	// @alias 在伤害范围内
	Z在伤害范围内 *commonco.ValueLimit
	// 条件-todo: 优先级
	// @alias 优先级
	Y优先级 int
	// 条件-需要效果数组
	// 指定的效果才会触发
	// @alias 需要效果
	X需要效果 map[string]string `link:"效果"`
	// 条件-不包括效果数组
	// 注意: 带伤害响应的单位, 如果伤害响应产生的伤害效果, 作用在自己身上,
	// 需要添加到ExcludeEffectArray中排除, 否则会导致死循环
	// @alias 排除效果
	P排除效果 map[string]string `link:"效果"`
	// 条件-目标过滤器
	// 被应用伤害响应的单位
	// @alias 目标过滤器
	M目标过滤器 *S目标过滤器
}

type S闪避响应条件 struct {

	// 条件-种类
	// 该单位应对其作出反应的伤害类型
	// @alias 伤害类型
	S伤害类型 map[battleenum.S伤害类型]bool
	// 条件-伤害限制
	// 产生的伤害在范围内才会触发
	// @alias 在伤害范围内
	Z在伤害范围内 *commonco.ValueLimit
	// 条件-todo: 优先级
	// @alias 优先级
	Y优先级 int
	// 条件-需要效果数组
	// 指定的效果才会触发
	// @alias 需要效果
	X需要效果 map[string]string
	// 条件-不包括效果数组
	// 注意: 带伤害响应的单位, 如果伤害响应产生的伤害效果, 作用在自己身上,
	// 需要添加到ExcludeEffectArray中排除, 否则会导致死循环
	// @alias 排除效果
	P排除效果 map[string]string
	// 条件-目标过滤器
	// 被应用伤害响应的单位
	// @alias 目标过滤器
	M目标过滤器 *S目标过滤器
}
type S死亡响应条件 struct {

	// 条件-种类
	// 该单位应对其作出反应的伤害类型
	// @alias 死亡类型
	S死亡类型 map[battleenum.DeathType]bool
	// 条件-todo: 优先级
	// @alias 优先级
	Y优先级 int
	// 条件-需要效果数组
	// 指定的效果才会触发
	// @alias 需要效果
	X需要效果 map[string]string
	// 条件-不包括效果数组
	// 注意: 带伤害响应的单位, 如果伤害响应产生的伤害效果, 作用在自己身上,
	// 需要添加到ExcludeEffectArray中排除, 否则会导致死循环
	// @alias 排除效果
	P排除效果 map[string]string
	// 条件-目标过滤器
	// 被应用伤害响应的单位
	// @alias 目标过滤器
	M目标过滤器 *S目标过滤器
}
